#!/usr/bin/perl # # dsabugs - Find installed packages affected by security issues # (C) 2004 Emanuele Rocca # 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 = ; 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++; }