#!/usr/bin/perl
#
# dsabugs - Find installed packages affected by security issues
# (C) 2004 Emanuele Rocca <ema@debian.org>
# Distributed under the GNU GPL License (see http://www.gnu.org/gpl)

use strict;
use Net::LDAP;

my $server = "bugs.debian.org";
my $port = "10101";
my $base   = "dc=current,dc=bugs,dc=debian,dc=org";
my $attrs = [ "debbugsID", "debbugsDate", "debbugsPackage" ];

my $ldap = Net::LDAP->new($server, "port" => $port)
    or die "Can't create ldap object: $!";
$ldap->bind
    or die "Can't bind to LDAP on $server:$port: $!";

my $mesg = $ldap->search("base" => $base,
	                 "filter" => "(debbugsTag=security)",
			 "attrs" => $attrs) or die;
			 
$mesg->code and die $mesg->error;

my %dsabugged;

# Fill %dsabugged with all the bug reports tagged security
# Package name as key, bug's ID as value
foreach my $entry ($mesg->entries) {
	$dsabugged{$entry->get_value("debbugsPackage")} = $entry->get_value("debbugsID");
}

$mesg = $ldap->unbind;

my $statusfile = "/var/lib/dpkg/status";
my @packagelines=();

if (open(FILE, "<$statusfile")) {
	@packagelines = <FILE>;
	close(FILE);
}

my $i=0;
foreach (@packagelines) {
	if ($packagelines[$i]=~/Status: install ok installed/) {
		if ($packagelines[$i-1]=~/: (.*)/) {
			print "\n".$1." - #".$dsabugged{$1} if($dsabugged{$1});
		}
	}
	$i++;
}
