=head1 NAME p0fOS - add message header (p0fIP2OS) indicating the operating system of the most recent untrusted relay. =head1 SYNOPSIS loadplugin Mail::SpamAssassin::Plugin::p0fOS /usr/local/etc/mail/spamassassin/plugins/p0fOS.pm header OS_LINUX p0fIP2OS =~ /Linux/i describe OS_LINUX Relay runs on Linux score OS_LINUX -0.1 header OS_WINDOWS p0fIP2OS =~ /Windows/i describe OS_WINDOWS Relay runs on Windows score OS_WINDOWS 0.5 =head1 REQUIREMENT This plugin requires uses the p0f stuff from http://whatever.frukt.org. =cut package Mail::SpamAssassin::Plugin::p0fOS; use strict; use base 'Mail::SpamAssassin::Plugin'; use p0fIP2OS; sub dbg { my $msg = shift; Mail::SpamAssassin::Plugin::dbg(sprintf("p0f: $msg",@_)); } sub extract_metadata { my ($self,$pars) = @_; my @relays = @{$pars->{msg}->{metadata}->{relays_untrusted}}; while (@relays) { my $relay = shift @relays; next unless ($relay->{ip}); dbg("IP $relay->{ip}"); my ($os,$ver) = ip2osver($relay->{ip}); $os = 'Unknown' unless ($os); $os .= " $ver" if ($ver); dbg("OS $os"); $pars->{msg}->put_metadata('p0fIP2OS',$os); last; } return 1; } 1;