diff options
-rw-r--r-- | perl-install/standalone/drakids | 267 |
1 files changed, 0 insertions, 267 deletions
diff --git a/perl-install/standalone/drakids b/perl-install/standalone/drakids deleted file mode 100644 index d786cd275..000000000 --- a/perl-install/standalone/drakids +++ /dev/null @@ -1,267 +0,0 @@ -#!/usr/bin/perl - -use strict; -use lib qw(/usr/lib/libDrakX); -use common; -use standalone; - -use Socket; -use mygtk2 qw(gtknew); -use ugtk2 qw(:dialogs); -use POSIX qw(strftime); -use dbus_object; -use network::ifw; - -use Gtk2::SimpleList; - -use ugtk2 qw(:create :helpers :wrappers); - -my $loglist = create_attack_list(); -$loglist->get_selection->set_mode('single'); - -my $blacklist = create_attack_list(); -$blacklist->get_selection->set_mode('multiple'); - -my $whitelist = Gtk2::SimpleList->new(addr => 'hidden', - N("Allowed addresses") => 'text', - ); -$whitelist->get_selection->set_mode('multiple'); -$whitelist->set_headers_clickable(1); -$whitelist->get_column(0)->signal_connect('clicked', \&sort_by_column, $whitelist->get_model); -$whitelist->get_column(0)->set_sort_column_id(0); - -my $w = ugtk2->new(N("Interactive Firewall"), - icon => "/usr/lib/libDrakX/icons/drakfirewall.png"); - -my $ifw = network::ifw->new(dbus_object::system_bus(), sub { - my ($_con, $msg) = @_; - my $member = $msg->get_member; - if ($member eq 'Attack') { - handle_log($msg->get_args_list); - } elsif ($member eq 'Blacklist') { - handle_blacklist($msg->get_args_list); - } elsif ($member eq 'Whitelist') { - handle_whitelist($msg->get_args_list); - } elsif ($member eq 'Clear') { - clear_lists(); - } elsif ($member eq 'Init') { - handle_init(); - } elsif ($member eq 'ManageRequest') { - $w->{window}->present; - } -}); -init_lists(); - -gtkadd($w->{window}, - gtknew('Notebook', children => [ - gtknew('Label', text => N("Log")), - gtknew('VBox', spacing => 5, children => [ - 1, gtknew('ScrolledWindow', width => 600, height => 400, child => $loglist), - 0, gtknew('HButtonBox', layout => 'edge', children_loose => [ - gtknew('Button', text => N("Clear logs"), clicked => \&clear_log), - gtknew('Button', text => N("Blacklist"), clicked => sub { blacklist(get_selected_log_seq()) }), - gtknew('Button', text => N("Whitelist"), clicked => sub { whitelist(get_selected_log()) }), - gtknew('Button', text => N("Close"), clicked => sub { Gtk2->main_quit }) - ]), - ]), - gtknew('Label', text => N("Blacklist")), - gtknew('VBox', spacing => 5, children => [ - 1, gtknew('ScrolledWindow', width => 600, height => 400, child => $blacklist), - 0, gtknew('HButtonBox', layout => 'edge', children_loose => [ - gtknew('Button', text => N("Remove from blacklist"), clicked => sub { unblacklist(get_selected_blacklist()) }), - gtknew('Button', text => N("Move to whitelist"), clicked => sub { - my @addr = get_selected_blacklist(); - unblacklist(@addr); - whitelist(@addr); - }), - gtknew('Button', text => N("Close"), clicked => sub { Gtk2->main_quit }) - ]), - ]), - gtknew('Label', text => N("Whitelist")), - gtknew('VBox', spacing => 5, children => [ - 1, gtknew('ScrolledWindow', width => 600, height => 400, child => $whitelist), - 0, gtknew('HButtonBox', layout => 'edge', children_loose => [ - gtknew('Button', text => N("Remove from whitelist"), clicked => sub { unwhitelist(get_selected_whitelist()) }), - gtknew('Button', text => N("Close"), clicked => sub { Gtk2->main_quit }) - ]), - ]), - ]), -); -$w->show; -Gtk2->main; - -ugtk2::exit(0); - -sub sort_by_column { - my ($column, $model) = @_; - my $col_id = $column->get_sort_column_id; - my ($old_id, $old_order) = $model->get_sort_column_id; - $model->set_sort_column_id($col_id, $old_id == $col_id && $old_order ne 'descending' ? 'ascending' : 'descending'); -} - -sub handle_init() { - $ifw->attach_object; - init_lists(); -} - -sub list_remove_addr { - my ($list, @addr) = @_; - #- workaround buggy Gtk2::SimpleList array abstraction, it destroys references - @$list = map { member($_->[0], @addr) ? () : [ @$_ ] } @$list; -} - -#- may throw an exception -sub init_blacklist() { - my @packets = $ifw->get_blacklist; - while (my @blacklist = splice(@packets, 0, 8)) { - handle_blacklist(@blacklist); - } -} - -sub clear_blacklist() { - @{$blacklist->{data}} = (); -} - -sub handle_blacklist { - attack_list_add($blacklist, network::ifw::attack_to_hash(\@_)); -} - -sub get_selected_blacklist() { - uniq(map { $blacklist->{data}[$_][0] } $blacklist->get_selected_indices); -} - -sub blacklist { - my @seq = @_; - eval { $ifw->set_blacklist_verdict($_, 1) foreach @seq }; - $@ and err_dialog(N("Interactive Firewall"), N("Unable to contact daemon")); -} - -sub unblacklist { - my @addr = @_; - eval { $ifw->unblacklist($_) foreach @addr }; - if (!$@) { - list_remove_addr($blacklist->{data}, @addr); - } else { - err_dialog(N("Interactive Firewall"), N("Unable to contact daemon")); - } -} - -#- may throw an exception -sub init_whitelist() { - handle_whitelist($_) foreach $ifw->get_whitelist; -} - -sub clear_whitelist() { - @{$whitelist->{data}} = (); -} - -sub handle_whitelist { - my ($addr) = @_; - push @{$whitelist->{data}}, [ $addr, network::ifw::resolve_address(network::ifw::get_ip_address($addr)) ]; -} - -sub get_selected_whitelist() { - uniq(map { $whitelist->{data}[$_][0] } $whitelist->get_selected_indices); -} - -sub whitelist { - my @addr = @_; - eval { $ifw->whitelist($_) foreach @addr }; - $@ and err_dialog(N("Interactive Firewall"), N("Unable to contact daemon")); -} - -sub unwhitelist { - my @addr = @_; - eval { $ifw->unwhitelist($_) foreach @addr }; - if (!$@) { - list_remove_addr($whitelist->{data}, @addr); - } else { - err_dialog(N("Interactive Firewall"), N("Unable to contact daemon")); - } -} - -sub init_lists() { - eval { - init_loglist(); - init_blacklist(); - init_whitelist(); - }; - $@ and print "$@\n", err_dialog(N("Interactive Firewall"), N("Unable to contact daemon")); -} - -sub clear_lists() { - clear_loglist(); - clear_blacklist(); - clear_whitelist(); -} - -sub create_attack_list() { - my $attacklist = Gtk2::SimpleList->new(addr => 'hidden', - seq => 'hidden', - timestamp => 'hidden', - N("Date") => 'text', - N("Attacker") => 'text', - N("Attack type") => 'text', - N("Service") => 'text', - N("Network interface") => 'text', - N("Protocol") => 'text', - ); - $attacklist->set_headers_clickable(1); - foreach (0, 1, 2) { - $attacklist->get_column($_)->signal_connect('clicked', \&sort_by_column, $attacklist->get_model); - #- sort on timestamp if Date column is clicked - #- sort columns include hidden columns while list columns don't - $attacklist->get_column($_)->set_sort_column_id($_ == 0 ? 1 : $_ + 2); - } - $attacklist; -} - -sub attack_list_add { - my ($attacklist, $attack) = @_; - push @{$attacklist->{data}}, [ - $attack->{addr}, - $attack->{seq}, - $attack->{timestamp}, - $attack->{date}, - $attack->{hostname}, - $attack->{type}, - $attack->{service}, - $attack->{indev}, - $attack->{protocol}, - ]; -} - -#- may throw an exception -sub init_loglist() { - my @packets = $ifw->get_reports(1); - while (my @attack = splice(@packets, 0, 10)) { - handle_log(@attack); - } -} - -sub clear_loglist() { - @{$loglist->{data}} = (); -} - -sub handle_log { - attack_list_add($loglist, network::ifw::attack_to_hash(\@_)); -} - -sub get_selected_log_seq() { - uniq(map { $loglist->{data}[$_][1] } $loglist->get_selected_indices); -} -sub get_selected_log() { - uniq(map { $loglist->{data}[$_][0] } $loglist->get_selected_indices); -} - -sub clear_log { - eval { - $ifw->clear_processed_reports; - $ifw->send_alert_ack; - }; - if (!$@) { - clear_loglist(); - } else { - err_dialog(N("Interactive Firewall"), N("Unable to contact daemon")); - } -} |