#!/usr/bin/perl -w


my $nessusid_db_dir = $ENV{HOME} . "/.nessusid";

my $nessus_plugins_dir;

foreach $d ("/opt/nessus/lib/nessus/plugins", 
	    $ENV{HOME} . "/NESSUS/nessus-plugins/scripts")
{
    if (-d $d and -f $d . "/find_service1.nasl") {
	$nessus_plugins_dir = $d;
	last;
    }
}

die "Could not find plugin directory" if ! $nessus_plugins_dir;
die "$nessusid_db_dir is not a directory or does not exist"
    if ! -d $nessusid_db_dir;

use DB_File;

my %id;

$id_dbf = $nessusid_db_dir . "/id2fname.db";
$db_mtime = &get_mtime($id_dbf);
$db_mtime = 1 if (! $db_mtime);

tie %id, 'DB_File', $id_dbf, O_RDWR|O_CREAT, 0644
    or die "$id_dbf: $!";

foreach $file (glob("$nessus_plugins_dir/*.nasl")) {
    my $mt = &get_mtime($file);
    my $name = $file;
    $name = $1 if ($file =~ m,.*/([^/]+\.nasl)$,);
    if ($mt >= $db_mtime) {
	open NASL, "<$file" or die "$file: $!";
	while (<NASL>) {
	    if (m/script_id *\( *([0-9]+) *\) *;/) {
		$id{$1} = $name;
		# print STDERR ">> $1\t$name\n";
		last;
	    }
	}
	close NASL;
    }
}


foreach $id (@ARGV) {
    print "$id\t$id{$id}\n" if exists $id{$id};
}

untie %id;

sub get_mtime {
    my $filename = $_[0];
    my ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,
	$atime,$mtime,$ctime,$blksize,$blocks) = stat($filename)
	    or warn "$filename: $!";
    return $mtime;
}
