📄 preferences.c
字号:
/*---[ preferences.c ]------------------------------------------------ * Copyright (C) 2000-2004 Tomas Junnonen (majix@sci.fi) * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * Functions for modifying/reading the program preferences and the * preferences GUI *--------------------------------------------------------------------*/#include <stdio.h>#include <errno.h>#include <gconf/gconf-client.h>#include <glade/glade-xml.h>#include "globals.h"#include "firestarter.h"#include "preferences.h"#include "wizard.h"#include "wizard-choices.h"#include "scriptwriter.h"#include "statusview.h"#include "util.h"#include "gui.h"#include "service.h"#include "tray.h"#include "dhcp-server.h"typedef enum{ SECTION_INTERFACE, SECTION_INTERFACE_EVENTS, SECTION_INTERFACE_POLICY, SECTION_FIREWALL, SECTION_FIREWALL_NETWORK, SECTION_FIREWALL_ICMP, SECTION_FIREWALL_TOS, SECTION_FIREWALL_ADVANCED,} Section;typedef struct _PreferencesDialog PreferencesDialog;struct _PreferencesDialog { GtkWidget *dialog_main; GtkTooltips *tooltips; GtkWidget *notebook;/* Interface */ GtkWidget *check_enable_tray_icon; GtkWidget *check_minimize_to_tray; /* Events */ GtkWidget *check_skip_redundant; GtkWidget *check_skip_not_for_firewall; GtkWidget *window_host_filter; GtkWidget *window_port_filter; GtkWidget *view_host_filter; GtkWidget *view_port_filter; GtkWidget *button_add_host; GtkWidget *button_add_port; GtkWidget *button_remove_host; GtkWidget *button_remove_port; GtkWidget *dialog_host_filter; GtkWidget *dialog_port_filter; GtkWidget *entry_host; GtkWidget *entry_port;/* Policy */ GtkWidget *check_apply_policy_instantly;/* Firewall *//* GtkWidget *check_start_on_boot; */ GtkWidget *check_start_on_gui; GtkWidget *check_start_on_dial_out; GtkWidget *check_start_on_dhcp;/* Network settings */ GtkWidget *combo_ext_device; GtkWidget *box_local_network_settings; GtkWidget *combo_int_device; GtkWidget *check_enable_connection_sharing; GtkWidget *check_enable_dhcp; GtkWidget *expander_dhcp; GtkWidget *radio_dhcp_create_conf; GtkWidget *table_dhcp_settings; GtkWidget *entry_dhcp_lowest_ip; GtkWidget *entry_dhcp_highest_ip; GtkWidget *entry_dhcp_name_server;/* ICMP */ GtkWidget *check_enable_icmp; GtkWidget *frame_icmp_types; GtkWidget *check_icmp_echo_request; GtkWidget *check_icmp_echo_reply; GtkWidget *check_icmp_traceroute; GtkWidget *check_icmp_mstraceroute; GtkWidget *check_icmp_unreachable; GtkWidget *check_icmp_timestamping; GtkWidget *check_icmp_address_masking; GtkWidget *check_icmp_redirection; GtkWidget *check_icmp_source_quenching;/* ToS */ GtkWidget *check_enable_tos; GtkWidget *frame_tos_services; GtkWidget *check_prioritize_workstations; GtkWidget *check_prioritize_servers; GtkWidget *check_prioritize_x; GtkWidget *frame_tos_maximize; GtkWidget *radio_max_throughput; GtkWidget *radio_max_reliability; GtkWidget *radio_max_interactivity;/* Advanced */ GtkWidget *radio_deny_packets; GtkWidget *check_block_external_broadcast; GtkWidget *check_block_internal_broadcast; GtkWidget *check_block_non_routables;};static GConfClient *client = NULL;static gboolean prefs_init = FALSE;/* [ preferences_init ] * Initialize the GConfClient */static voidpreferences_init (void){ if (prefs_init) return; client = gconf_client_get_default (); gconf_client_add_dir (client, "/apps/firestarter", GCONF_CLIENT_PRELOAD_NONE, NULL); prefs_init = TRUE;}/* [ preferences_check_schema ] * Check that a Firestarter gconf schema has been installed * The schema is not optional */voidpreferences_check_schema (void){ gchar *string; if (!prefs_init) preferences_init (); string = preferences_get_string (PREFS_SYSLOG_FILE); if (string == NULL) { gchar msg[] = N_("A proper configuration for Firestarter was not found. " "If you are running Firestarter from the directory you " "built it in, run 'make install-data-local' to install a " "configuration, or simply 'make install' to install the " "whole program.\n\n" "Firestarter will now close."); GtkWidget *dialog; dialog = gtk_message_dialog_new (NULL, GTK_DIALOG_DESTROY_WITH_PARENT, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, msg); gtk_dialog_run (GTK_DIALOG (dialog)); gtk_widget_destroy (dialog); exit(1); }}gbooleanpreferences_get_bool (const gchar *gconf_key){ if (!prefs_init) preferences_init (); return gconf_client_get_bool (client, gconf_key, NULL);}gchar *preferences_get_string (const gchar *gconf_key){ gchar *str; if (!prefs_init) preferences_init (); str = gconf_client_get_string (client, gconf_key, NULL); return str;}voidpreferences_set_bool (const gchar *gconf_key, gboolean data){ g_return_if_fail (gconf_key); if (!prefs_init) preferences_init (); gconf_client_set_bool (client, gconf_key, data, NULL);}voidpreferences_set_string (const gchar *gconf_key, const gchar *data){ g_return_if_fail (gconf_key || data); if (!prefs_init) preferences_init (); gconf_client_set_string (client, gconf_key, data, NULL);}static voidpreferences_show_help (void){ gnome_url_show ("http://www.fs-security.com/docs/preferences.php", NULL);}static GtkTreeModel*create_sections_model (void){ GtkTreeStore *store; GtkTreeIter *iter; GtkTreeIter *top_section; store = gtk_tree_store_new (2, G_TYPE_INT, G_TYPE_STRING); iter = g_new (GtkTreeIter, 1); gtk_tree_store_append (store, iter, NULL); top_section = gtk_tree_iter_copy (iter); gtk_tree_store_set (store, iter, 0, SECTION_INTERFACE, 1, _("Interface"), -1); gtk_tree_store_append (store, iter, top_section); gtk_tree_store_set (store, iter, 0, SECTION_INTERFACE_EVENTS, 1, _("Events"), -1); gtk_tree_store_append (store, iter, top_section); gtk_tree_store_set (store, iter, 0, SECTION_INTERFACE_POLICY, 1, _("Policy"), -1); gtk_tree_iter_free (top_section); gtk_tree_store_append (store, iter, NULL); top_section = gtk_tree_iter_copy (iter); gtk_tree_store_set (store, iter, 0, SECTION_FIREWALL, 1, _("Firewall"), -1); gtk_tree_store_append (store, iter, top_section); gtk_tree_store_set (store, iter, 0, SECTION_FIREWALL_NETWORK, 1, _("Network Settings"), -1); gtk_tree_store_append (store, iter, top_section); gtk_tree_store_set (store, iter, 0, SECTION_FIREWALL_ICMP, 1, _("ICMP Filtering"), -1); gtk_tree_store_append (store, iter, top_section); gtk_tree_store_set (store, iter, 0, SECTION_FIREWALL_TOS, 1, _("ToS Filtering"), -1); gtk_tree_store_append (store, iter, top_section); gtk_tree_store_set (store, iter, 0, SECTION_FIREWALL_ADVANCED, 1, _("Advanced Options"), -1); gtk_tree_iter_free (top_section); gtk_tree_iter_free (iter); return GTK_TREE_MODEL (store);}static voiddialog_destroyed (GtkObject *obj, void **dialog_pointer){ if (dialog_pointer != NULL) { g_free (*dialog_pointer); *dialog_pointer = NULL; }}static Sectionget_current_section (GtkTreeView *sections){ GtkTreeSelection *selection; GtkTreeModel *model; GtkTreeIter iter; Section selected; model = gtk_tree_view_get_model (sections); selection = gtk_tree_view_get_selection (sections); gtk_tree_selection_get_selected (selection, NULL, &iter); gtk_tree_model_get (model, &iter, 0, &selected, -1); return selected;}static voidchange_section_cb (GtkTreeView *view, PreferencesDialog *dialog){ Section section; section = get_current_section (view); gtk_notebook_set_page (GTK_NOTEBOOK (dialog->notebook), section);}static voidselect_first_section (GtkTreeView *view){ GtkTreePath *path; path = gtk_tree_path_new_from_string ("0"); gtk_tree_view_set_cursor (view, path, NULL, FALSE); gtk_tree_path_free (path);}static voidfilter_host_view_append (GtkListStore *store, gchar *host){ GtkTreeIter iter; gtk_list_store_append (store, &iter); gtk_list_store_set (store, &iter, 0, host, -1);}static voidfilter_port_view_append (GtkListStore *store, gchar *port){ GtkTreeIter iter; gchar *data, *service; service = service_get_name (atoi (port), "tcp"); data = g_strconcat (g_strstrip (port), " (", service, ")", NULL); gtk_list_store_append (store, &iter); gtk_list_store_set (store, &iter, 0, data, -1); g_free (service); g_free (data);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -