File: concat.pl

package info (click to toggle)
samhain 4.1.4-7
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 9,720 kB
  • sloc: ansic: 84,043; sh: 15,325; asm: 5,756; makefile: 1,614; perl: 1,231
file content (69 lines) | stat: -rwxr-xr-x 1,787 bytes parent folder | download | duplicates (8)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#! /usr/bin/perl

# Copyright Rainer Wichmann (2004)
#
# License Information:
# 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.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#

use warnings;
use strict;

my $fno = 0;
my $file = '';
my @last2 = ();
my $line = '';

sub usage () {
    print "Usage: concat.pl <list_of_database_files>\n\n";
    print "       Will concatenate samhain file signature database files\n";
    print "       and print to stdout.\n";
    print "       Does not work on signed or otherwise modified\n";
    print "       file signature databases.\n";
}

if ($#ARGV < 0) { # must be at least one file
    usage();
    exit 1;
} elsif ($ARGV[0] =~ /^-h$/ || $ARGV[0] =~ /^--?help$/) {
    usage();
    exit 0;
}
    

for $file (@ARGV) {
    open FH, "< $file" or die "Cannot open $file: $!";
    if ($fno != 0) { # search and read past the start-of-file marker
	while (<FH>) {
	    last if ($_ =~ /^\[SOF\]$/);
	}
    } 
    @last2 = ();
    while (<FH>) {
	push @last2, $_;
	if (@last2 > 2) {
	    $line = shift @last2;
	    print $line;
	}
    }
    close FH;
    ++$fno;
}

# last two lines of last file
$line = shift @last2;
print $line;
$line = shift @last2;
print $line;