/*---[ policyview.c ]-------------------------------------------------
* Copyright (C) 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.
*
* The traffic policy editor page
*--------------------------------------------------------------------*/
#include <config.h>
#include <gnome.h>
#include <stdarg.h>
#include <sys/wait.h>
#include "policyview.h"
#include "gui.h"
#include "globals.h"
#include "preferences.h"
#include "menus.h"
#include "firestarter.h"
#include "util.h"
#include "scriptwriter.h"
#include "service.h"
#define RULEVIEW_HEIGHT 110
static GtkTreeView *modifying_view, *selected_view;
static GtkWidget *in_allow_from, *in_allow_service, *in_forward,
*out_deny_from, *out_deny_to, *out_deny_service,
*out_allow_from, *out_allow_to, *out_allow_service;
static gboolean modified_inbound, modified_outbound, modifications_require_restart;
static GtkWidget *inbound_group;
static GtkWidget *outbound_group;
/* Feature mask for a target selector widget */
typedef enum
{
TARGET_ANYONE = 1 << 1,
TARGET_FIREWALL = 1 << 2,
TARGET_LAN = 1 << 3,
TARGET_HOST = 1 << 4,
TARGET_ALL = 0x3FFFFE
} TargetMask;
/* The different types of policy widgets implemented */
enum
{
RULE_HOST_SELECTOR,
RULE_SERVICE_SELECTOR,
RULE_TARGET_SELECTOR,
RULE_FORWARD_SELECTOR,
RULE_COMMENT
} ;
enum
{
POLICY_GROUP_INBOUND,
POLICY_GROUP_OUTBOUND,
};
static GtkWidget *
embed_in_scrolled_window (GtkWidget *widget)
{
GtkWidget *window;
window = gtk_scrolled_window_new (NULL, NULL);
gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (window), GTK_SHADOW_IN);
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (window),
GTK_POLICY_NEVER,
GTK_POLICY_AUTOMATIC);
gtk_container_add (GTK_CONTAINER (window), widget);
return window;
}
static void
widget_visibility_sync_toggle (GtkWidget *source, GtkWidget *target) {
gboolean visible;
visible = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (source));
if (visible)
gtk_widget_show (target);
else
gtk_widget_hide (target);
}
/* [ append_to_view ]
* Append rule data to a rule view
* Either pass the view to be appended to, OR the already initialized store and iter
*/
static gboolean
append_to_view (GtkTreeView *view, GtkListStore *user_store, GtkTreeIter *user_iter, gchar *data)
{
GtkTreeIter *iter;
GtkListStore *store;
gchar **tokens;
gchar *token;
gint elements_read;
gint i, columns;
if (view == NULL) {
iter = user_iter;
store = user_store;
} else {
iter = g_new (GtkTreeIter, 1);
store = (GtkListStore *)gtk_tree_view_get_model(GTK_TREE_VIEW (view));
}
columns = gtk_tree_model_get_n_columns (GTK_TREE_MODEL (store));
tokens = g_strsplit (data, ",", -1);
for (i = 0, token = tokens[0]; token != NULL; i++) {
token = tokens[i];
}
elements_read = i-1;
if (elements_read != columns) { /* Check that the rule entry has the correct number of parameters */
g_printerr ("Malformed user rule encountered: %s. Cause: insufficient elements!\n", data);
g_free (data);
g_strfreev (tokens);
return FALSE;
}
gtk_list_store_append (store, iter);
for (i = 0; i < columns; i++) {
token = g_strstrip (tokens[i]);
if (gtk_tree_model_get_column_type (GTK_TREE_MODEL (store), i) == G_TYPE_INT)
gtk_list_store_set (store, iter, i, atoi(token), -1);
else
gtk_list_store_set (store, iter, i, token, -1);
}
if (preferences_get_bool (PREFS_APPLY_POLICY_INSTANTLY))
policyview_apply ();
else
menus_policy_apply_enabled (TRUE);
g_strfreev (tokens);
if (view != NULL)
gtk_tree_iter_free (iter);
return TRUE;
}
/* [ reload_view ]
* Reload the data in a view from a rule file
*/
static void
reload_view (GtkTreeView *view, gchar *path)
{
GtkTreeIter iter;
GtkListStore *store;
GIOChannel* in;
GError *error = NULL;
gchar *line;
store = (GtkListStore *)gtk_tree_view_get_model(GTK_TREE_VIEW (view));
in = g_io_channel_new_file (path, "r", &error);
if (in == NULL) {
g_printerr ("Error reading file %s: %s\n", path, error->message);
return;
}
while (g_io_channel_read_line (in, &line, NULL, NULL, &error) == G_IO_STATUS_NORMAL) {
if (g_str_has_prefix(g_strstrip (line), "#")) /* Skip comments */
continue;
append_to_view (NULL, store, &iter, line);
}
g_io_channel_shutdown (in, FALSE, NULL);
}
static void
rule_dialog_reset (GtkDialog *dialog)
{
GtkWidget *element = NULL;
element = g_object_get_data (G_OBJECT (dialog), "host_selector");
if (element) {
gtk_entry_set_text (GTK_ENTRY (element), "");
gtk_widget_grab_focus (element); /* Reset focus */
}
element = g_object_get_data (G_OBJECT (dialog), "service_selector_service");
if (element) {
element = gtk_bin_get_child (GTK_BIN (element));
gtk_entry_set_text (GTK_ENTRY (element), "");
element = g_object_get_data (G_OBJECT (dialog), "service_selector_port");
gtk_entry_set_text (GTK_ENTRY (element), "");
}
element = g_object_get_data (G_OBJECT (dialog), "target_selector_anyone");
if (element) {
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (element), TRUE); /* Reset the dialog */
element = g_object_get_data (G_OBJECT (dialog), "target_selector_host");
gtk_entry_set_text (GTK_ENTRY (element), "");
}
element = g_object_get_data (G_OBJECT (dialog), "forward_selector_host");
if (element) {
gtk_entry_set_text (GTK_ENTRY (element), "");
element = g_object_get_data (G_OBJECT (dialog), "forward_selector_port");
gtk_entry_set_text (GTK_ENTRY (element), "");
}
element = g_object_get_data (G_OBJECT (dialog), "comment");
if (element) {
gtk_entry_set_text (GTK_ENTRY (element), "");
}
g_object_steal_data (G_OBJECT (dialog), "editing");
}
static gboolean
rule_dialog_validate_data (GtkDialog *dialog)
{
GtkWidget *element = NULL;
GtkWidget *toggle;
element = g_object_get_data (G_OBJECT (dialog), "host_selector");
if (element) {
if (!is_a_valid_host (gtk_entry_get_text (GTK_ENTRY (element)))) {
error_dialog (_("Invalid host"),
_("Invalid host"),
_("The host you have specified is not a valid host,\n"
"please review your choice."),
Firestarter.window);
return FALSE;
}
}
element = g_object_get_data (G_OBJECT (dialog), "service_selector_port");
if (element) {
if (!is_a_valid_port (gtk_entry_get_text (GTK_ENTRY (element)))) {
error_dialog (_("Invalid port"),
_("Invalid port"),
_("The port you have specified is not a valid port,\n"
"please review your choice."),
Firestarter.window);
return FALSE;
}
}
element = g_object_get_data (G_OBJECT (dialog), "target_selector_host");
toggle = g_object_get_data (G_OBJECT (dialog), "target_selector_ip");
if (element &&
gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (toggle))) {
if (!is_a_valid_host (gtk_entry_get_text (GTK_ENTRY (element)))) {
error_dialog (_("Invalid host"),
_("Invalid host"),
_("The host you have specified is not a valid host,\n"
"please review your choice."),
Firestarter.window);
return FALSE;
}
}
element = g_object_get_data (G_OBJECT (dialog), "forward_selector_host");
if (element) {
if (!is_a_valid_host (gtk_entry_get_text (GTK_ENTRY (element)))) {
error_dialog (_("Invalid internal host"),
_("Invalid internal host"),
_("The host you have specified is not a valid host,\n"
"please review your choice."),
Firestarter.window);
return FALSE;
}
element = g_object_get_data (G_OBJECT (dialog), "forward_selector_port");
if (!is_a_valid_port (gtk_entry_get_text (GTK_ENTRY (element)))) {
error_dialog (_("In
没有合适的资源?快使用搜索试试~ 我知道了~
firestarter-1.0.3.tar.gz
需积分: 9 12 下载量 162 浏览量
2008-06-10
11:06:40
上传
评论
收藏 1.15MB GZ 举报
温馨提示
共181个文件
po:38个
gmo:38个
h:20个
linux下的防火墙,具体如何使用,还不是很清楚
资源推荐
资源详情
资源评论
收起资源包目录
firestarter-1.0.3.tar.gz (181个子文件)
Makefile.am 987B
Makefile.am 854B
Makefile.am 702B
Makefile.am 96B
Makefile.am 87B
AUTHORS 61B
policyview.c 45KB
netfilter-script.c 37KB
preferences.c 36KB
statusview.c 31KB
hitview.c 26KB
wizard.c 24KB
scriptwriter.c 21KB
menus.c 20KB
util.c 13KB
eggtrayicon.c 12KB
firestarter.c 11KB
gui.c 7KB
service.c 7KB
tray.c 6KB
logread.c 6KB
dhcp-server.c 4KB
savelog.c 3KB
wizard-choices.c 2KB
ChangeLog 31KB
ChangeLog 25KB
configure 722KB
firestarter.console 69B
COPYING 15KB
CREDITS 889B
firestarter.desktop 2KB
preferences.glade 121KB
ja.gmo 39KB
fr.gmo 36KB
hu.gmo 36KB
de.gmo 36KB
es.gmo 36KB
vi.gmo 35KB
cs.gmo 34KB
ca.gmo 34KB
tr.gmo 33KB
en_CA.gmo 33KB
nl.gmo 32KB
pt_BR.gmo 32KB
en_GB.gmo 31KB
pt.gmo 12KB
pa.gmo 11KB
el.gmo 10KB
sr.gmo 10KB
zh_CN.gmo 9KB
no.gmo 8KB
nb.gmo 8KB
pl.gmo 8KB
it.gmo 8KB
sv.gmo 8KB
sk.gmo 8KB
sr@Latn.gmo 8KB
ru.gmo 5KB
zh_TW.gmo 4KB
sq.gmo 3KB
lv.gmo 3KB
hr.gmo 2KB
az.gmo 2KB
ga.gmo 1KB
fi.gmo 1KB
uk.gmo 1KB
da.gmo 981B
ro.gmo 936B
ml.gmo 932B
ko.gmo 920B
config.guess 41KB
firestarter-pixbufs.h 451KB
preferences.h 5KB
eggtrayicon.h 2KB
scriptwriter.h 2KB
policyview.h 2KB
hitview.h 2KB
util.h 1KB
menus.h 1KB
gui.h 1KB
logread.h 1KB
statusview.h 1KB
firestarter.h 1KB
wizard.h 1KB
globals.h 864B
dhcp-server.h 834B
tray.h 761B
service.h 745B
wizard-choices.h 737B
netfilter-script.h 666B
savelog.h 662B
intltool-merge.in 30KB
intltool-update.in 25KB
Makefile.in 17KB
firestarter.schemas.in 15KB
Makefile.in 15KB
intltool-extract.in 12KB
firestarter.spec.in 11KB
Makefile.in 7KB
Makefile.in.in 7KB
共 181 条
- 1
- 2
资源评论
jiangbin860927
- 粉丝: 1
- 资源: 3
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功