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

📄 wizard.c

📁 Linux系统下著名的个人防火墙
💻 C
📖 第 1 页 / 共 2 页
字号:
/*---[ wizard.c ]------------------------------------------------------ * Copyright (C) 2000-2002 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.de * * The wizard functions *--------------------------------------------------------------------*/#include "globals.h"#include "firestarter.h"#include "wizard.h"#include "wizard-choices.h"#include "scriptwriter.h"#include "util.h"#include "xpm/firestarter-pixbufs.h"#include "preferences.h"#include "dhcp-server.h"#include "gui.h"#include "statusview.h"enum{	RESPONSE_GO_BACK,	RESPONSE_GO_FORWARD,	RESPONSE_QUIT,	RESPONSE_FINISHED};enum{	WIZARD_WELCOME_PAGE,	WIZARD_NET_DEVICE_PAGE,	WIZARD_NAT_PAGE,	WIZARD_FINISHED_PAGE};static voidext_device_selection_changed (GtkComboBox *combo, Wizard *data){	GtkTreeIter iter;	GtkTreeModel *model;	gchar *interface;	gtk_combo_box_get_active_iter (combo, &iter);	model = gtk_combo_box_get_model (combo);	gtk_tree_model_get (model, &iter, 1, &interface, -1);	data->extdevice = interface;}static voidint_device_selection_changed (GtkComboBox *combo, Wizard *data){	GtkTreeIter iter;	GtkTreeModel *model;	gchar *interface;	gtk_combo_box_get_active_iter (combo, &iter);	model = gtk_combo_box_get_model (combo);	gtk_tree_model_get (model, &iter, 1, &interface, -1);	data->intdevice = interface;}static gbooleancombo_set_active_device (GtkComboBox *combo, gchar *new_if){	GtkTreeIter iter;	GtkTreeModel *model;	gchar *interface = NULL;	model = gtk_combo_box_get_model (combo);	gtk_tree_model_get_iter_first (model, &iter);	do {		gtk_tree_model_get (model, &iter, 1, &interface, -1);		if (interface != NULL && new_if != NULL &&		    g_str_equal (interface, new_if)) {			gtk_combo_box_set_active_iter (combo, &iter);			return TRUE;		}	} while (gtk_tree_model_iter_next (model, &iter));	return FALSE;}/* [ create_device_page ] * Create the contents of the simple device selection page */GtkWidget*create_device_page (Wizard *data){	GtkWidget *table;	GtkWidget *label;	GtkWidget *hbox;	GtkWidget *combo;	GtkCellRenderer *renderer;	table = gtk_table_new (5, 2, FALSE);	gtk_table_set_row_spacings (GTK_TABLE(table), GNOME_PAD_SMALL);	gtk_table_set_col_spacings (GTK_TABLE(table), GNOME_PAD_SMALL);	label = gtk_label_new (_(		"Please select your Internet connected network device from the drop-down\n"		"list of available devices."));	gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.0);	gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);	gtk_table_attach (GTK_TABLE (table), label, 0, 1, 0, 1,		GTK_FILL, GTK_FILL, GNOME_PAD, GNOME_PAD);	hbox = gtk_hbox_new (FALSE, GNOME_PAD_SMALL);	gtk_table_attach (GTK_TABLE (table), hbox, 0, 1, 1, 2,		GTK_FILL, GTK_FILL, GNOME_PAD, 2); 	label = gtk_label_new (_("Detected device(s):"));	gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 5);	combo = gtk_combo_box_new_with_model (get_devices_model ());	renderer = gtk_cell_renderer_text_new ();	gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combo), renderer, FALSE);	gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combo), renderer, "text", 0, NULL);	g_signal_connect (combo, "changed",	                  G_CALLBACK (ext_device_selection_changed), data);	if (!combo_set_active_device (GTK_COMBO_BOX (combo),	                              preferences_get_string (PREFS_FW_EXT_IF))) {		printf ("Warning: External interface previously configured not found\n");		gtk_combo_box_set_active (GTK_COMBO_BOX (combo), 0); /* Default to the first item */	}	gtk_box_pack_start (GTK_BOX (hbox), combo, FALSE, FALSE, 5);	label = gtk_label_new (NULL);	gtk_label_set_markup (GTK_LABEL (label), g_strconcat (		"<small>", _(		"Tip: If you use a modem the device name is likely ppp0. If you have a cable modem or a\n"		"DSL connection, choose eth0. Choose ppp0 if you know your cable or DSL operator uses\n"		"the PPPoE protocol."		), "</small>", NULL));	gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.0);	gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);	gtk_table_attach (GTK_TABLE (table), label, 0, 1, 2, 3,		GTK_FILL, GTK_FILL, GNOME_PAD, GNOME_PAD);	data->pppcheck = gtk_check_button_new_with_label (_(		"Start the firewall on dial-out"));	gtk_tooltips_set_tip (Firestarter.ttips, data->pppcheck, _(		"Check this option and the firewall will start when "		"you dial your Internet Service Provider."), "");	gtk_table_attach (GTK_TABLE (table), data->pppcheck, 0, 2, 3, 4,		GTK_FILL, GTK_FILL, GNOME_PAD, 0);	data->dhcpcheck = gtk_check_button_new_with_label (_(		"IP address is assigned via DHCP"));	gtk_tooltips_set_tip (Firestarter.ttips, data->dhcpcheck, _(		"Check this option if you need to connect to a DHCP server. "		"Cable modem and DSL users should check this."), "");	gtk_table_attach (GTK_TABLE (table), data->dhcpcheck, 0, 2, 4, 5,		GTK_FILL, GTK_FILL, GNOME_PAD, 0);	return table;}static voidmanual_reference_enter (GtkWidget *widget){	const gchar *text = gtk_label_get_text (GTK_LABEL (widget));	gtk_label_set_markup (GTK_LABEL (widget), g_strconcat (			      "<span foreground=\"red\" underline=\"single\">",			      text, "</span>", NULL));}static voidmanual_reference_leave (GtkWidget *widget){	const gchar *text = gtk_label_get_text (GTK_LABEL (widget));	gtk_label_set_markup (GTK_LABEL (widget), g_strconcat (			      "<span foreground=\"blue\" underline=\"none\">",			      text, "</span>", NULL));}static GtkWidget*manual_reference_new (gchar *description, gchar *url){	GtkWidget *event_box = gtk_event_box_new ();	GtkWidget *label = gtk_label_new (NULL);	gtk_label_set_markup (GTK_LABEL (label), g_strconcat (			      "<span foreground=\"blue\">",			      description, "</span>", NULL));	gtk_container_add (GTK_CONTAINER (event_box), label);	gtk_widget_set_events (event_box, GDK_BUTTON_PRESS_MASK | GDK_ENTER_NOTIFY_MASK | GDK_LEAVE_NOTIFY_MASK);	g_signal_connect_swapped (G_OBJECT (event_box), "button_press_event",		G_CALLBACK (gnome_url_show), "http://www.fs-security.com/docs/dhcp.php");	g_signal_connect_swapped (G_OBJECT (event_box), "enter_notify_event",		G_CALLBACK (manual_reference_enter), label);	g_signal_connect_swapped (G_OBJECT (event_box), "leave_notify_event",		G_CALLBACK (manual_reference_leave), label);	gtk_event_box_set_above_child (GTK_EVENT_BOX (event_box), TRUE);	return event_box;}/* [ create_masq_page ] * Create the contents of the ipmasq setup page */GtkWidget*create_masq_page (Wizard *data){	GtkWidget *table;	GtkWidget *table2;	GtkWidget *table3;	GtkWidget *label;	GtkWidget *nat_enabled;	GtkWidget *combo;	GtkCellRenderer *renderer;	GtkWidget *vbox;	GtkWidget *dhcp_server;	GtkWidget *dhcp_expander;	GtkWidget *dhcp_keep_config;	GtkWidget *dhcp_new_config;	GtkWidget *dhcp_lowest_ip;	GtkWidget *dhcp_highest_ip;	GtkWidget *dhcp_nameserver;	table = gtk_table_new (2, 2, FALSE);	gtk_table_set_row_spacings (GTK_TABLE (table), GNOME_PAD_SMALL);	gtk_table_set_col_spacings (GTK_TABLE (table), GNOME_PAD_SMALL);	label = gtk_label_new (_(		"Firestarter can share your Internet connection with the computers on your local network\n"		"using a single public IP address and a method called Network Address Translation."));	gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.0);	gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);	gtk_table_attach (GTK_TABLE (table), label, 0, 2, 0, 1,		GTK_FILL, GTK_FILL, GNOME_PAD, GNOME_PAD_SMALL);	nat_enabled = gtk_check_button_new_with_label (_("Enable Internet connection sharing"));	gtk_table_attach (GTK_TABLE (table), nat_enabled, 0, 2, 2, 3,		GTK_FILL, GTK_FILL, GNOME_PAD, GNOME_PAD_SMALL);	data->masq = nat_enabled;	vbox = gtk_vbox_new (FALSE, GNOME_PAD);	gtk_widget_set_sensitive (vbox, gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (data->masq)));	gtk_table_attach (GTK_TABLE (table), vbox, 0, 2, 3, 4,		GTK_FILL, GTK_FILL, GNOME_PAD, 0);	gui_widget_sensitivity_sync (GTK_TOGGLE_BUTTON (nat_enabled), vbox);	table2 = gtk_table_new (2, 5, FALSE);	gtk_table_set_row_spacings (GTK_TABLE(table2), GNOME_PAD_SMALL);	gtk_table_set_col_spacings (GTK_TABLE(table2), GNOME_PAD_SMALL);	gtk_box_pack_start (GTK_BOX (vbox), table2, FALSE, FALSE, 0); 	label = gtk_label_new (_("Local area network device:"));	gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);	gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);	gtk_table_attach (GTK_TABLE (table2), label, 0, 1, 0, 1,		GTK_FILL, GTK_FILL, GNOME_PAD, 3);	combo = gtk_combo_box_new_with_model (get_devices_model ());	renderer = gtk_cell_renderer_text_new ();	gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combo), renderer, FALSE);	gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combo), renderer, "text", 0, NULL);	g_signal_connect (combo, "changed",	                  G_CALLBACK (int_device_selection_changed), data);	if (!combo_set_active_device (GTK_COMBO_BOX (combo),	                              preferences_get_string (PREFS_FW_INT_IF))) {		printf ("Warning: Internal interface previously configured not found\n");		gtk_combo_box_set_active (GTK_COMBO_BOX (combo), 0); /* Default to the first item */	}	gtk_table_attach (GTK_TABLE (table2), combo, 1, 2, 0, 1,		GTK_FILL, GTK_FILL, GNOME_PAD, 3);	dhcp_server = gtk_check_button_new_with_label (_("Enable DHCP for local network"));	gtk_table_attach (GTK_TABLE (table2), dhcp_server, 0, 1, 1, 2,		GTK_FILL, GTK_FILL, GNOME_PAD, 3);	label = manual_reference_new (_("Explain the DHCP function..."),				     "http://www.fs-security.com/docs/dhcp.php");	gtk_table_attach (GTK_TABLE (table2), label, 1, 2, 1, 2,		GTK_FILL, GTK_FILL, GNOME_PAD, 3);	dhcp_expander = gtk_expander_new (_("DHCP server details"));	gtk_expander_set_spacing (GTK_EXPANDER (dhcp_expander), 3);	gtk_table_attach (GTK_TABLE (table2), dhcp_expander, 0, 2, 2, 3,		GTK_FILL, GTK_FILL, GNOME_PAD, 0);	gtk_expander_set_expanded (GTK_EXPANDER (dhcp_expander), TRUE);	gtk_expander_set_expanded (GTK_EXPANDER (dhcp_expander), FALSE);	gtk_widget_set_sensitive (dhcp_expander, FALSE);	/* If a dhcpd binary exists, allow the user to configure it */	if (dhcp_server_exists ()) {		gui_widget_sensitivity_sync (GTK_TOGGLE_BUTTON (dhcp_server), dhcp_expander);	} else {		gtk_widget_set_sensitive (dhcp_server, FALSE);	}	vbox = gtk_vbox_new (FALSE, GNOME_PAD);	gtk_container_add (GTK_CONTAINER (dhcp_expander), vbox);	dhcp_keep_config = gtk_radio_button_new_with_label (NULL,		_("Keep existing DHCP configuration"));	gtk_box_pack_start (GTK_BOX (vbox), dhcp_keep_config, FALSE, FALSE, 0);	dhcp_new_config = gtk_radio_button_new_with_label_from_widget (GTK_RADIO_BUTTON (dhcp_keep_config),		_("Create new DHCP configuration:"));	gtk_box_pack_start (GTK_BOX (vbox), dhcp_new_config, FALSE, FALSE, 0);	table3 = gtk_table_new (2, 5, FALSE);	gtk_table_set_row_spacings (GTK_TABLE(table3), GNOME_PAD_SMALL);	gtk_table_set_col_spacings (GTK_TABLE(table3), GNOME_PAD_SMALL);	gtk_box_pack_start (GTK_BOX (vbox), table3, FALSE, FALSE, 0);	if (dhcp_server_configuration_exists ()) {		gtk_widget_set_sensitive (table3, FALSE);	} else {		gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (dhcp_new_config), TRUE);		gtk_widget_set_sensitive (dhcp_keep_config, FALSE);	}	gui_widget_sensitivity_sync (GTK_TOGGLE_BUTTON (dhcp_new_config), table3);	label = gtk_label_new (_("Lowest IP address to assign:"));	gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);	gtk_table_attach (GTK_TABLE (table3), label, 0, 1, 2, 3,		GTK_FILL, GTK_FILL, GNOME_PAD, 0);	dhcp_lowest_ip = gtk_entry_new ();	gtk_entry_set_text (GTK_ENTRY (dhcp_lowest_ip), preferences_get_string (PREFS_FW_DHCP_LOWEST_IP)); 	gtk_table_attach (GTK_TABLE (table3), dhcp_lowest_ip, 1, 2, 2, 3,		GTK_FILL, GTK_FILL, GNOME_PAD, 0);

⌨️ 快捷键说明

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