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

📄 prefs_context.c

📁 大国补丁后的nessus2.2.8的源代码
💻 C
字号:
/* $Id: prefs_context.c,v 1.7.2.2 2006/11/04 23:22:37 renaud Exp $ * * Copyright (C) 2004 by Intevation GmbH * Author(s): * Thomas Arendsen Hein <thomas@intevation.de> * * This program is free software under the GNU GPL (>=v2) * Read the file COPYING coming with the software for details. * * In addition, as a special exception, Intevation GmbH gives * permission to link the code of this program with the OpenSSL * library (or with modified versions of OpenSSL that use the same * license as OpenSSL), 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 <gtk/gtk.h>#include "globals.h"#include "nessus.h"#include "context.h"#include "preferences.h"#include "error_dialog.h"#include "comm.h"#include "prefs_dialog.h"#include "prefs_target.h"#include "prefs_dialog_plugins_prefs.h"#include "prefs_dialog_scan_opt.h"#include "prefs_plugins.h"#include "prefs_dialog_user.h"#include "backend.h"#include "prefs_context.h"#include "report.h"#include "prefs_report.h"#include "prefs_scope_tree.h"#include "prefs_comment.h"#include "../xpm/encrypted.xpm"#include "../xpm/unencrypted.xpm"voidprefs_context_enable_widget(name, enabled)  const gchar *name;  gboolean enabled;{  GtkWidget *widget = GTK_WIDGET(arg_get_value(MainDialog, name));  gtk_widget_set_sensitive(widget, enabled);}voidprefs_context_update_widgets(context)  struct context *context;{  static context_type last_type = CONTEXT_ENUM;  static context_action last_action = CONTEXT_IDLE;  context_type type = context->type;  context_type action = context->action;  int do_enable;    if(type != last_type || action != last_action )  {    prefs_context_enable_widget("RENAMETASK_MENUITEM", type >= CONTEXT_TASK);    prefs_context_enable_widget("DELETETASK_MENUITEM", type >= CONTEXT_TASK);    prefs_context_enable_widget("EXECSCOPE_MENUITEM", type >= CONTEXT_SCOPE && action == CONTEXT_IDLE );    prefs_context_enable_widget("NEWSCOPE_MENUITEM", type >= CONTEXT_TASK);    prefs_context_enable_widget("RENAMESCOPE_MENUITEM", type >= CONTEXT_SCOPE);    prefs_context_enable_widget("DELETESCOPE_MENUITEM", type >= CONTEXT_SCOPE);    prefs_context_enable_widget("OPENSCOPE_MENUITEM", type >= CONTEXT_TASK);    prefs_context_enable_widget("SAVESCOPE_MENUITEM", type >= CONTEXT_SCOPE);    prefs_context_enable_widget("RENAMEREPORT_MENUITEM", type >= CONTEXT_REPORT);    prefs_context_enable_widget("DELETEREPORT_MENUITEM", type >= CONTEXT_REPORT);    prefs_context_enable_widget("IMPORTREPORT_MENUITEM", type >= CONTEXT_SCOPE);    prefs_context_enable_widget("EXPORTREPORT_MENUITEM", type >= CONTEXT_REPORT);    prefs_context_enable_widget("PRINTREPORT_MENUITEM", type >= CONTEXT_REPORT);    prefs_context_enable_widget("DELETECONTEXT_BUTTON", type >= CONTEXT_TASK);    prefs_context_enable_widget("EXECSCOPE_BUTTON", type == CONTEXT_SCOPE && action == CONTEXT_IDLE);  }  last_type = type;  last_action = action;  prefs_context_enable_widget("MOVESCOPE_MENUITEM",      type >= CONTEXT_SCOPE && Global->children->next);  do_enable = (type == CONTEXT_SCOPE || type == CONTEXT_GLOBAL)    && context->socket < 0;  prefs_context_enable_widget("CONNECT_MENUITEM", do_enable);  prefs_context_enable_widget("CONNECT_BUTTON", do_enable);  do_enable = (type == CONTEXT_SCOPE || type == CONTEXT_GLOBAL )    && context->socket >= 0     && action == CONTEXT_IDLE;  prefs_context_enable_widget("DISCONNECT_MENUITEM", do_enable);  prefs_context_enable_widget("DISCONNECT_BUTTON", do_enable);}voidprefs_context_switch_notebookpage(notebook, page, page_num, user_data)  GtkNotebook *notebook;  GtkNotebookPage *page;  guint page_num;  gpointer user_data;{  GtkWidget *newpage = gtk_notebook_get_nth_page(notebook, page_num);  if(!GTK_WIDGET_IS_SENSITIVE(newpage))  {    show_info(_("This page is not available in the current context."));    prefs_context_update(Context);  }}voidprefs_context_enable_notebookpage(notebook, pagenr, enable)  int pagenr;  GtkWidget *notebook;  gboolean enable;{  GtkWidget *page = gtk_notebook_get_nth_page(GTK_NOTEBOOK(notebook), pagenr);  GtkWidget *label = gtk_notebook_get_tab_label(GTK_NOTEBOOK(notebook), page);  gtk_widget_set_sensitive(label, enable);  gtk_widget_set_sensitive(page, enable);}voidprefs_context_update_notebook(comment, options, report)  gboolean comment;  gboolean options;  gboolean report;{  GtkWidget *notebook = arg_get_value(MainDialog, "CONTEXTNOTEBOOK");  prefs_context_enable_notebookpage(notebook, 0, comment);  prefs_context_enable_notebookpage(notebook, 1, options);  prefs_context_enable_notebookpage(notebook, 2, report);  if(report)    gtk_notebook_set_current_page(GTK_NOTEBOOK(notebook), 2);  else if(options)    gtk_notebook_set_current_page(GTK_NOTEBOOK(notebook), 1);  else if(comment)    gtk_notebook_set_current_page(GTK_NOTEBOOK(notebook), 0);}voidprefs_context_update_comment(context)  struct context *context;{  fill_comment(context, arg_get_value(MainDialog, "COMMENT"));}voidprefs_context_enable_options_frame(name, enabled)  const gchar *name;  gboolean enabled;{  struct arglist *options = arg_get_value(MainDialog, "OPTIONS");  struct arglist *suboptions = arg_get_value(options, name);  GtkWidget *widget = GTK_WIDGET(arg_get_value(suboptions, "FRAME"));  gtk_widget_set_sensitive(widget, enabled);}voidprefs_context_update_options_enable(enable)  gboolean enable;{  prefs_context_enable_options_frame("SCAN_OPTIONS", enable);  prefs_context_enable_options_frame("PLUGINS", enable);  prefs_context_enable_options_frame("PLUGINS_PREFS", enable);  prefs_context_enable_options_frame("TARGET", enable);  prefs_context_enable_options_frame("USER", enable);  prefs_context_enable_options_frame("SAVE_KB", enable);}voidprefs_context_update_options(context)  struct context *context;{  if(prefs_has_options(context))  {    prefs_dialog_set_defaults(context, MainDialog);    fill_scanner_list(context, arg_get_value(MainDialog, "SCAN_OPTIONS"));    fill_plugins_family(context, arg_get_value(MainDialog, "PLUGINS"));    fill_rules_list(context, arg_get_value(MainDialog, "USER"));    prefs_plugins_prefs_redraw(context, arg_get_value(MainDialog, "PLUGINS_PREFS"));    prefs_context_update_options_enable(context->type < CONTEXT_REPORT);  }}voidprefs_context_update_report(context)  struct context *context;{  int be;  struct arglist *ctrls_report;  char *fname;  /*   * load the corresponding report and update the report page   */  fname = report_get_filename(context);  ctrls_report = arg_get_value(MainDialog, "REPORT");  /* but first discard the current one */  be = (int)arg_get_value(ctrls_report, "BE");  if (be >= 0) {    backend_dispose(be);    arg_set_value(ctrls_report, "BE", sizeof(int), (void *)-1);  }  if (fname && check_is_file(fname)) {    be = backend_import_report(fname);    efree(&fname);    arg_set_value(ctrls_report, "BE", sizeof(int), (void *)be);    scopetreeview_counters_update(context, be, fname);  }  prefs_report_update(ctrls_report);}/* Update the encryption state image. * * If is_encrypted is true, the picture shown in the image is set to * encrypted_xpm otherwise it's unencrypted_xpm. */static voidupdate_encryption_image(image, is_encrypted)  GtkWidget *image;  int is_encrypted;{  static GdkPixbuf *encrypted = NULL;  static GdkPixbuf *unencrypted = NULL;  if (encrypted == NULL)  {    encrypted = gdk_pixbuf_new_from_xpm_data(encrypted_xpm);  }  if (unencrypted == NULL)  {    unencrypted = gdk_pixbuf_new_from_xpm_data(unencrypted_xpm);  }  gtk_image_set_from_pixbuf(GTK_IMAGE(image),      is_encrypted ? encrypted : unencrypted);}voidprefs_context_update_statusbar(context)  struct context *context;{  GtkStatusbar * statusbar = GTK_STATUSBAR(arg_get_value(MainDialog,	"CONNECT_STATUSBAR"));  gchar * connect_status;  int port = prefs_get_int(context, "nessusd_port");  const gchar * username = prefs_get_string(context, "nessusd_user");  const gchar * hostname = prefs_get_string(context, "nessusd_host");  gboolean use_ssl = prefs_get_int(context, "use_ssl");  GtkWidget *icon = arg_get_value(MainDialog, "CONNECT_ENCRYPTED_IMAGE");  gtk_statusbar_pop(statusbar,    gtk_statusbar_get_context_id(statusbar, "connection"));  if(context->socket >= 0)  {    if (port == (int)prefs_get_default(context, "nessusd_port"))      connect_status = g_strdup_printf(_("Connection: %s@%s %s"),	username, hostname, use_ssl ? _("encrypted") : _("unencrypted") );    else if (port >= 0)      connect_status = g_strdup_printf(_("Connection: %s@%s:%d %s"),	username, hostname, port, use_ssl ? _("encrypted") : _("unencrypted") );    else      connect_status = g_strdup_printf(_("Connection: user %s %s"),	username, use_ssl ? _("encrypted") : _("unencrypted") );    update_encryption_image(icon, use_ssl);  }  else  {    connect_status = g_strdup_printf(_("not connected"));    /* if not connected we show the unencrypted icon.  This is not     * ideal.  Maybe there should be a third image for that case. */    update_encryption_image(icon, 0);  }  gtk_statusbar_push(statusbar,      gtk_statusbar_get_context_id(statusbar, "connection"), connect_status);  g_free(connect_status);}voidprefs_context_update(context)  struct context *context;{  GtkWidget *scopetree = GTK_WIDGET(      arg_get_value(arg_get_value(MainDialog, "SCOPETREE"), "TREEVIEW"));  GtkTreePath *path = gtk_tree_row_reference_get_path(context->treerowref);  GtkTreePath *curpath;  GtkWidget *contextframe = arg_get_value(MainDialog, "CONTEXTFRAME");  gchar *text = NULL;  GtkTreeViewColumn *column;  /* Make sure to synchronise other data structures with the GUI elements */  prefs_dialog_apply(Context, MainDialog);  prefs_dialog_apply_plugin_prefs(Context->plugins);  prefs_dialog_apply_plugin_prefs(Context->scanners);  context_sync_plugin_prefs(Context);  scope_move_menuitem_enable(Context, TRUE);  scope_move_menuitem_enable(context, FALSE);  Context = context;	/* change current context */  column = gtk_tree_view_get_column(GTK_TREE_VIEW(scopetree), 0);  gtk_tree_view_get_cursor(GTK_TREE_VIEW(scopetree), &curpath, NULL);  if(!curpath || !path || gtk_tree_path_compare(curpath, path))    gtk_tree_view_set_cursor(GTK_TREE_VIEW(scopetree), path, column, FALSE);  if(curpath)    gtk_tree_path_free(curpath);  if(path)    gtk_tree_path_free(path);  switch(context->type)  {    case CONTEXT_GLOBAL:      prefs_context_update_notebook(FALSE, TRUE, FALSE);      text = g_strdup_printf(prefs_get_string(context, "name"));      break;    case CONTEXT_TASK:      prefs_context_update_notebook(TRUE, FALSE, FALSE);      text = g_strdup_printf(_("Task: %s"),	  prefs_get_string(context, "name"));      break;    case CONTEXT_SCOPE:      /* disable options and comments while scanning */      prefs_context_update_notebook(context->action != CONTEXT_SCANNING,	  context->action != CONTEXT_SCANNING, FALSE);      text = g_strdup_printf(_("Scope: %s (Task: %s)"),	  prefs_get_string(context, "name"),	  prefs_get_string(context->parent, "name"));      break;    case CONTEXT_REPORT:      prefs_context_update_notebook(TRUE, prefs_has_options(context), TRUE);      text = g_strdup_printf(_("Report for scope: %s (Task: %s)"),	  prefs_get_string(context->parent, "name"),	  prefs_get_string(context->parent->parent, "name"));      break;    default:      show_error(_("prefs_context_update called with illegal context."));  }  gtk_frame_set_label(GTK_FRAME(contextframe), text);  g_free(text);  prefs_context_update_widgets(context);  prefs_context_update_comment(context);  prefs_context_update_options(context);  prefs_context_update_report(context);  prefs_context_update_statusbar(context);}

⌨️ 快捷键说明

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