[Rt-commit] r5946 - in rtir/branches/2.1-EXPERIMENTAL: . lib/RT
ruz at bestpractical.com
ruz at bestpractical.com
Fri Sep 15 18:45:56 EDT 2006
Author: ruz
Date: Fri Sep 15 18:45:55 2006
New Revision: 5946
Modified:
rtir/branches/2.1-EXPERIMENTAL/ (props changed)
rtir/branches/2.1-EXPERIMENTAL/Makefile.PL
rtir/branches/2.1-EXPERIMENTAL/lib/RT/Action/RTIR_FindIP.pm
rtir/branches/2.1-EXPERIMENTAL/lib/RT/IR.pm
Log:
r1568 at cubic-pc: cubic | 2006-09-16 02:55:52 +0400
CIDR
* add support for CIDR blocks in:
** messages
** searches
Modified: rtir/branches/2.1-EXPERIMENTAL/Makefile.PL
==============================================================================
--- rtir/branches/2.1-EXPERIMENTAL/Makefile.PL (original)
+++ rtir/branches/2.1-EXPERIMENTAL/Makefile.PL Fri Sep 15 18:45:55 2006
@@ -19,10 +19,20 @@
unshift @INC, $local_lib_path, $lib_path;
requires('RT::FM');
+# RTIR needs this version of SB due lack
+# of features in priviouse
requires('DBIx::SearchBuilder', 1.40);
+
+# work hours
requires('Business::Hours');
+# service level agreement
requires('Business::SLA');
+# whois tool
requires('Net::Whois::RIPE');
+# CIDR parsing and converting
+requires('Net::CIDR');
+requires('Regexp::Common::net::CIDR');
+
auto_install();
substitute( {
Modified: rtir/branches/2.1-EXPERIMENTAL/lib/RT/Action/RTIR_FindIP.pm
==============================================================================
--- rtir/branches/2.1-EXPERIMENTAL/lib/RT/Action/RTIR_FindIP.pm (original)
+++ rtir/branches/2.1-EXPERIMENTAL/lib/RT/Action/RTIR_FindIP.pm Fri Sep 15 18:45:55 2006
@@ -6,6 +6,7 @@
use base qw(RT::Action::RTIR);
use Regexp::Common qw(net);
+use Regexp::Common::net::CIDR ();
=head2 Prepare
@@ -31,7 +32,7 @@
my $attach = $self->TransactionObj->ContentObj;
return 1 unless $attach && $attach->id;
- my @IPs = ( $attach->Content =~ /($RE{net}{IPv4})/g );
+ my @IPs = ( $attach->Content =~ /($RE{net}{IPv4})/go );
foreach ( @IPs ) {
my ($status, $msg) = $ticket->AddCustomFieldValue(
Value => $_,
@@ -40,6 +41,22 @@
$RT::Logger->error("Couldn't add CF value: $msg") unless $status;
}
+ my @CIDRs = ( $attach->Content =~ /$RE{net}{CIDR}{IPv4}{-keep}/go );
+ while ( my ($addr, $bits) = splice @CIDRs, 0, 2 ) {
+ my $cidr = join( '.', map $_||0, (split /\./, $addr)[0..3] ) ."/$bits";
+ my ($sip, $eip) = split /-/, ( (Net::CIDR::cidr2range( $cidr ))[0] or next );
+ $RT::Logger->crit("$sip - $eip");
+ my $snum = unpack( 'N', pack( 'C4', split /\./, $sip ) );
+ my $enum = unpack( 'N', pack( 'C4', split /\./, $eip ) );
+ while ( $snum++ <= $enum ) {
+ my ($status, $msg) = $ticket->AddCustomFieldValue(
+ Value => join( '.', unpack( 'C4', pack( 'N', $snum ) ) ),
+ Field => $cf,
+ );
+ $RT::Logger->error("Couldn't add CF value: $msg") unless $status;
+ }
+ }
+
return 1;
}
Modified: rtir/branches/2.1-EXPERIMENTAL/lib/RT/IR.pm
==============================================================================
--- rtir/branches/2.1-EXPERIMENTAL/lib/RT/IR.pm (original)
+++ rtir/branches/2.1-EXPERIMENTAL/lib/RT/IR.pm Fri Sep 15 18:45:55 2006
@@ -102,7 +102,9 @@
# store IPs in "%03d.%03d.%03d.%03d" format so ops
# like > and < make sense.
use Hook::LexWrap;
-use Regexp::Common qw(net);
+use Regexp::Common qw(RE_net_IPv4);
+use Regexp::Common::net::CIDR;
+require Net::CIDR;
# limit formatting "%03d.%03d.%03d.%03d"
require RT::Tickets;
@@ -113,7 +115,7 @@
};
# "= 'sIP-eIP'" => "( >=sIP AND <=eIP)"
-# "! 'sIP-eIP'" => "( <sIP AND >eIP)"
+# "!= 'sIP-eIP'" => "( <sIP AND >eIP)"
wrap 'RT::Tickets::_CustomFieldLimit',
pre => sub {
return unless $_[3] =~ /^\s*($RE{net}{IPv4})\s*-\s*($RE{net}{IPv4})\s*$/o;
@@ -123,6 +125,14 @@
$tickets->_CustomFieldLimit($field, ($negative? '<': '>='), $start_ip, @rest);
@_[2, 3] = ( ( $negative? '>': '<=' ), $end_ip );
};
+
+# "[!]= 'CIDR'" => "op 'sIP-eIP'"
+wrap 'RT::Tickets::_CustomFieldLimit',
+ pre => sub {
+ return unless $_[3] =~ /^\s*$RE{net}{CIDR}{IPv4}{-keep}\s*$/o;
+ my $cidr = join( '.', map $_||0, (split /\./, $1)[0..3] ) ."/$2";
+ $_[3] = (Net::CIDR::cidr2range( $cidr ))[0] || $_[3];
+ };
$RT::Tickets::dispatch{'CUSTOMFIELD'} = \&RT::Tickets::_CustomFieldLimit;
# on OCFV create format storage
@@ -137,7 +147,7 @@
}
};
-# strip nulls(deserialize)
+# strip zero chars(deserialize)
wrap 'RT::ObjectCustomFieldValue::Content',
post => sub {
return unless $_[-1];
More information about the Rt-commit
mailing list