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

📄 policyview.c

📁 Linux系统下著名的个人防火墙
💻 C
📖 第 1 页 / 共 4 页
字号:
			element = g_object_get_data (G_OBJECT (dialog), "target_selector_host");			data = g_strconcat (data, ", ", gtk_entry_get_text (GTK_ENTRY (element)), NULL);		}	}	element = g_object_get_data (G_OBJECT (dialog), "forward_selector_host");	if (element) {		data = g_strconcat (data, ", ", gtk_entry_get_text (GTK_ENTRY (element)), NULL);		element = g_object_get_data (G_OBJECT (dialog), "forward_selector_port");		data = g_strconcat (data, ", ", gtk_entry_get_text (GTK_ENTRY (element)), NULL);	}	element = g_object_get_data (G_OBJECT (dialog), "comment");	if (element) {		gchar *text, *buf;		text = g_strdup (gtk_entry_get_text (GTK_ENTRY (element)));		buf = malloc (strlen (text) * 2);				escape_string (text, buf);		data = g_strconcat (data, ", ", buf, NULL);		g_free (buf);	}	g_strstrip (data);	if (g_str_has_prefix (data, ", ")) {		return data+2;	} else		return data;}static voidrule_dialog_response_cb (GtkDialog *dialog,                         gint response_id,                         gpointer user_data){	if (response_id == GTK_RESPONSE_ACCEPT) {		gchar *data;		if (!rule_dialog_validate_data (dialog))			return;		data = rule_dialog_extract_data (dialog);		if (data != NULL) {			gchar *rule_file = g_object_get_data (G_OBJECT (modifying_view), "rule_file");			GtkTreeIter *iter = g_object_steal_data (G_OBJECT (dialog), "editing");			if (iter) { /* Modifying an existing entry */				GtkTreeModel *model;				gint *position;								model = gtk_tree_view_get_model (GTK_TREE_VIEW (modifying_view));				position = g_object_steal_data (G_OBJECT (dialog), "position");				gtk_list_store_remove (GTK_LIST_STORE (model), iter); /* Remove from the view */				remove_line_from_file (rule_file, (int)position);				gtk_tree_iter_free (iter);			}			append_to_file (rule_file, data, TRUE);			if (g_strrstr (rule_file, "inbound")) {				if (modifying_view == GTK_TREE_VIEW (in_forward))					modifications_require_restart = TRUE;				else					modified_inbound = TRUE;			} else				modified_outbound = TRUE;			append_to_view (GTK_TREE_VIEW (modifying_view), NULL, NULL, data);		}	}	gtk_widget_hide (GTK_WIDGET (dialog));	rule_dialog_reset (dialog);	modifying_view = NULL;	menus_policy_edit_enabled (FALSE);	menus_policy_remove_enabled (FALSE);}static voidactivate_dialog_cb (GtkWidget *dialog){	gtk_dialog_response (GTK_DIALOG (dialog), GTK_RESPONSE_ACCEPT);}static GtkWidget *create_dialog_header (gchar *title, GtkWidget *dialog){	GtkWidget *vbox, *catbox, *label;	vbox = gtk_vbox_new (FALSE, 14);	gtk_box_pack_start  (GTK_BOX (GTK_DIALOG (dialog)->vbox), vbox, FALSE, FALSE, 8);	catbox = gtk_vbox_new (FALSE, 6);	gtk_box_pack_start (GTK_BOX (vbox), catbox, FALSE, FALSE, 0);	label = gtk_label_new (NULL);	gtk_label_set_markup (GTK_LABEL (label), g_strconcat (		"<span weight=\"bold\">", title, "</span>", NULL));	gtk_misc_set_alignment (GTK_MISC (label), 0, 0.0);	gtk_box_pack_start (GTK_BOX (catbox), label, FALSE, FALSE, 0);	return catbox;}static GtkWidget *create_indented_box (GtkWidget *parent){	GtkWidget *hbox, *vbox, *label, *rowbox;	hbox = gtk_hbox_new (FALSE, 0);	gtk_box_pack_start (GTK_BOX (parent), hbox, FALSE, FALSE, 0);	label = gtk_label_new ("    ");	gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);	vbox = gtk_vbox_new (FALSE, 6);	gtk_box_pack_start (GTK_BOX (hbox), vbox, FALSE, FALSE, 0);	rowbox = gtk_hbox_new (FALSE, 6);	gtk_box_pack_start (GTK_BOX (vbox), rowbox, FALSE, FALSE, 0);	return rowbox;}static voidadd_host_selector (gchar *title, GtkWidget *dialog){	GtkWidget *label;	GtkWidget *catbox;	GtkWidget *rowbox;	GtkWidget *entry;	catbox = create_dialog_header (title, dialog);	rowbox = create_indented_box (catbox);	label = gtk_label_new (_("IP, host or network"));	gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);	gtk_box_pack_start (GTK_BOX (rowbox), label, FALSE, FALSE, 0);	entry = gtk_entry_new ();	g_object_set_data (G_OBJECT (dialog), "host_selector", entry);	gtk_widget_set_size_request (entry, 150, -1);	g_signal_connect_swapped (G_OBJECT (entry), "activate",	                          G_CALLBACK (activate_dialog_cb), G_OBJECT (dialog));	gtk_box_pack_start (GTK_BOX (rowbox), entry, FALSE, FALSE, 0);}/* Update the port suggestions when the user selects a named service */static voidupdate_ports_from_service (GtkComboBox *combo, GtkWidget *dialog){	GtkTreeIter iter;	if (gtk_combo_box_get_active_iter (combo, &iter)) {		GtkTreeModel *model;		gchar *ports;		GtkWidget *entry;		model = gtk_combo_box_get_model (combo);		gtk_tree_model_get (model, &iter, 1, &ports, -1);		/* Update the firewall hosts port range with the ports of the service */		entry = g_object_get_data (G_OBJECT (dialog), "service_selector_port");		gtk_entry_set_text (GTK_ENTRY (entry), ports);		/* Update the internal port range with the ports of the service */		entry = g_object_get_data (G_OBJECT (dialog), "forward_selector_port");		if (entry != NULL)			gtk_entry_set_text (GTK_ENTRY (entry), ports);	}}/* Suggest a service name when the user manually enters a port number */static gbooleanresolve_port_to_service (GtkEntry *entry, GdkEventKey *event, GtkWidget *combo){	const gchar *port;	port = gtk_entry_get_text (entry);	if (strlen (port) > 1) {		gchar *service;		GtkWidget *service_entry;		service = service_get_name (atoi(port), "tcp");		service_entry = gtk_bin_get_child (GTK_BIN (combo));		gtk_entry_set_text (GTK_ENTRY (service_entry), service);		g_free (service);	}	return FALSE;}static voidadd_service_selector (gchar *title, GtkWidget *dialog){	GtkSizeGroup *sizegroup;	GtkWidget *combo;	GtkWidget *entry;	GtkWidget *label;	GtkWidget *catbox, *rowbox;	catbox = create_dialog_header (title, dialog);	rowbox = create_indented_box (catbox);	sizegroup = gtk_size_group_new (GTK_SIZE_GROUP_BOTH);			label = gtk_label_new (_("Name"));	gtk_size_group_add_widget (sizegroup, label);	gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);	gtk_box_pack_start (GTK_BOX (rowbox), label, FALSE, FALSE, 0);	combo = gtk_combo_box_entry_new_with_model (GTK_TREE_MODEL (services_get_model ()), 0);	gtk_widget_set_size_request (combo, 100, -1);	g_object_set_data (G_OBJECT (dialog), "service_selector_service", combo);	entry = gtk_bin_get_child (GTK_BIN (combo));	g_signal_connect_swapped (G_OBJECT (entry), "activate",	                          G_CALLBACK (activate_dialog_cb), G_OBJECT (dialog));	gtk_box_pack_start (GTK_BOX (rowbox), combo, FALSE, FALSE, 0);	rowbox = create_indented_box (catbox);			label = gtk_label_new (_("Port"));	gtk_size_group_add_widget (sizegroup, label);	gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);	gtk_box_pack_start (GTK_BOX (rowbox), label, FALSE, FALSE, 0);	entry = gtk_entry_new ();	gtk_widget_set_size_request (entry, 100, -1);	g_object_set_data (G_OBJECT (dialog), "service_selector_port", entry);	g_signal_connect_swapped (G_OBJECT (entry), "activate",	                          G_CALLBACK (activate_dialog_cb), G_OBJECT (dialog));	g_signal_connect (G_OBJECT (entry), "key-release-event",	                  G_CALLBACK (resolve_port_to_service), combo);	gtk_box_pack_start (GTK_BOX (rowbox), entry, FALSE, FALSE, 0);	g_signal_connect (G_OBJECT (combo), "changed",	                  G_CALLBACK (update_ports_from_service), dialog);}static voidadd_target_selector (gchar *title, TargetMask mask, GtkWidget *dialog){	GtkWidget *catbox, *rowbox;	GtkWidget *anyone, *firewall, *lan, *ip;	catbox = create_dialog_header (title, dialog);	rowbox = create_indented_box (catbox);	anyone = gtk_radio_button_new_with_label (NULL, _("Anyone"));	g_object_set_data (G_OBJECT (dialog), "target_selector_anyone", anyone);	firewall = gtk_radio_button_new_with_label_from_widget (GTK_RADIO_BUTTON (anyone), _("Firewall host"));	g_object_set_data (G_OBJECT (dialog), "target_selector_firewall", firewall);	lan = gtk_radio_button_new_with_label_from_widget (GTK_RADIO_BUTTON (firewall), _("LAN clients"));	g_object_set_data (G_OBJECT (dialog), "target_selector_lan", lan);	ip = gtk_radio_button_new_with_label_from_widget (GTK_RADIO_BUTTON (lan), _("IP, host or network"));	g_object_set_data (G_OBJECT (dialog), "target_selector_ip", ip);	if (mask & TARGET_ANYONE) {		gtk_box_pack_start (GTK_BOX (rowbox), anyone, FALSE, FALSE, 0);	}	if (mask & TARGET_FIREWALL) {		gtk_box_pack_start (GTK_BOX (rowbox), firewall, FALSE, FALSE, 0);	}	if (mask & TARGET_LAN) {		gtk_box_pack_start (GTK_BOX (rowbox), lan, FALSE, FALSE, 0);	}	if (mask & TARGET_HOST) {		GtkWidget *entry;		rowbox = create_indented_box (catbox);		gtk_box_pack_start (GTK_BOX (rowbox), ip, FALSE, FALSE, 0);		entry = gtk_entry_new ();		g_object_set_data (G_OBJECT (dialog), "target_selector_host", entry);		gtk_widget_set_size_request (entry, 120, -1);		g_signal_connect_swapped (G_OBJECT (entry), "activate",		                          G_CALLBACK (activate_dialog_cb), G_OBJECT (dialog));		gtk_box_pack_start (GTK_BOX (rowbox), entry, FALSE, FALSE, 0);		gtk_widget_set_sensitive (entry, FALSE);		gui_widget_sensitivity_sync (GTK_TOGGLE_BUTTON (ip), entry);	}}static voidadd_forward_selector (gchar *title, GtkWidget *dialog){	GtkSizeGroup *sizegroup;	GtkWidget *entry;	GtkWidget *label;	GtkWidget *catbox, *rowbox;	catbox = create_dialog_header (title, dialog);	rowbox = create_indented_box (catbox);	sizegroup = gtk_size_group_new (GTK_SIZE_GROUP_BOTH);			label = gtk_label_new (_("IP or host"));	gtk_size_group_add_widget (sizegroup, label);	gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);	gtk_box_pack_start (GTK_BOX (rowbox), label, FALSE, FALSE, 0);	entry = gtk_entry_new ();	gtk_widget_set_size_request (entry, 150, -1);	g_object_set_data (G_OBJECT (dialog), "forward_selector_host", entry);	g_signal_connect_swapped (G_OBJECT (entry), "activate",	                          G_CALLBACK (activate_dialog_cb), G_OBJECT (dialog));	gtk_box_pack_start (GTK_BOX (rowbox), entry, FALSE, FALSE, 0);	rowbox = create_indented_box (catbox);			label = gtk_label_new (_("Port"));	gtk_size_group_add_widget (sizegroup, label);	gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);	gtk_box_pack_start (GTK_BOX (rowbox), label, FALSE, FALSE, 0);	entry = gtk_entry_new ();	gtk_widget_set_size_request (entry, 100, -1);	g_object_set_data (G_OBJECT (dialog), "forward_selector_port", entry);	g_signal_connect_swapped (G_OBJECT (entry), "activate",	                          G_CALLBACK (activate_dialog_cb), G_OBJECT (dialog));	gtk_box_pack_start (GTK_BOX (rowbox), entry, FALSE, FALSE, 0);}static voidadd_comment_space (gchar *title, GtkWidget *dialog){	GtkWidget *catbox;	GtkWidget *rowbox;	GtkWidget *entry;	GtkWidget *hbox, *vbox;	GtkWidget *label;	catbox = create_dialog_header (title, dialog);	hbox = gtk_hbox_new (FALSE, 0);	gtk_box_pack_start (GTK_BOX (catbox), hbox, FALSE, FALSE, 0);	label = gtk_label_new ("    ");	gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);	vbox = gtk_vbox_new (FALSE, 6);	gtk_box_pack_start (GTK_BOX (hbox), vbox, TRUE, TRUE, 0);	rowbox = gtk_hbox_new (FALSE, 6);	gtk_box_pack_start (GTK_BOX (vbox), rowbox, FALSE, FALSE, 0);	entry = gtk_entry_new ();	g_object_set_data (G_OBJECT (dialog), "comment", entry);	g_signal_connect_swapped (G_OBJECT (entry), "activate",	                          G_CALLBACK (activate_dialog_cb), G_OBJECT (dialog));	gtk_box_pack_start (GTK_BOX (rowbox), entry, TRUE, TRUE, 0);}static gbooleanrule_dialog_delete_request_cb (GtkWidget *widget, GdkEvent *event){	return TRUE;}static GtkWidget *create_dialog (gchar *title, ...){	GtkWidget *dialog;	va_list ap;	dialog = gtk_dialog_new_with_buttons (title,	                                      GTK_WINDOW (Firestarter.window),	                                      GTK_DIALOG_DESTROY_WITH_PARENT | GTK_DIALOG_NO_SEPARATOR,	                                      /* GTK_STOCK_HELP, GTK_RESPONSE_HELP, */	                                      GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT,

⌨️ 快捷键说明

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