Package: release.debian.org
Severity: normal
User: release.debian....@packages.debian.org
Usertags: unblock

Please unblock package kgb-bot/1.05-1

At first glance this looks like a new upstream release, but we are 
upstream, so it is all under control. The "upstream" diff is attached.

1.05-1 fixes two bugs:
    #593631 -- can't access /usr/bin/polygen (moved to /usr/games)
    #593633 -- dies when polygen is removed after daemon startup

Changelog:

  * kgb-bot: use File::Which to find polygen binary; split out the
    polygen-finding function; add libfile-which-perl to Suggests;
    closes: #593631 -- can't access /usr/bin/polygen
  * kgb-bot: check existence of polygen binary just before using it;
    closes: #593633 -- dies when polygen is removed after daemon startup
  * any problems in finding/running polygen binary are logged only when debug
    is enabled as a counter-measure against remotely-assisted log abuse

Thanks in advance,
    dam
diff --git a/Changes b/Changes
index d30fa6b..b254e97 100644
--- a/Changes
+++ b/Changes
@@ -1,3 +1,19 @@
+
+1.05:
+  * kgb-bot: use File::Which to find polygen binary; split out the
+    polygen-finding function; closes: #593631
+  * kgb-bot: check existence of polygen binary before using it;
+    closes: #593633
+  * add gregor to copyright holders
+  * move polygen detection entirely at runtime
+  * any problems in finding polygen binary are logged only when debug is
+    enabled as a counter-measure against remotely-assisted log abuse
+
+1.04:
+  * use Digest::SHA from core instead of ::SHA1
+  * remove references to Svn::* from Build.PL
+    Closes: #582739 (by working around #589812)
+
 1.03:
   * Synchronized versions of kgb-bot and KGB
 
diff --git a/debian/changelog b/debian/changelog
index 90d18a3..810efc8 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,16 @@
+kgb-bot (1.05-1) unstable; urgency=low
+
+  [ gregor herrmann, Damyan Ivanov ]
+  * kgb-bot: use File::Which to find polygen binary; split out the
+    polygen-finding function; add libfile-which-perl to Suggests;
+    closes: #593631 -- can't access /usr/bin/polygen
+  * kgb-bot: check existence of polygen binary just before using it;
+    closes: #593633 -- dies when polygen is removed after daemon startup
+  * any problems in finding/running polygen binary are logged only when debug
+    is enabled as a counter-measure against remotely-assisted log abuse
+
+ -- Damyan Ivanov <d...@debian.org>  Fri, 10 Sep 2010 22:49:25 +0300
+
 kgb-bot (1.04-1) unstable; urgency=low
 
   * use Digest::SHA from core instead of ::SHA1
diff --git a/debian/control b/debian/control
index 073e777..53bb807 100644
--- a/debian/control
+++ b/debian/control
@@ -36,7 +36,7 @@ Depends: ${misc:Depends}, ${perl:Depends}, adduser, perl (>= 5.10),
  libproc-pid-file-perl,
  libyaml-perl,
  kgb-client
-Suggests: polygen, libipc-run-perl
+Suggests: polygen, libipc-run-perl, libfile-which-perl
 Description: IRC collaboration bot
  KGB is an IRC bot, helping people work together by notifying an IRC channel
  when a commit occures.
diff --git a/debian/copyright b/debian/copyright
index 8ab2b89..b902410 100644
--- a/debian/copyright
+++ b/debian/copyright
@@ -3,10 +3,12 @@ Upstream source is available frop http://alioth.debian.org/projects/kgb
 Upstream authors:
      Martín Ferrari <tin...@debian.org>
      Damyan Ivanov <d...@debian.org>
+     gregor herrmann <gre...@debian.org>
 
 Copyright:
 # Copyright © 2008 Martín Ferrari
 # Copyright © 2008,2009,2010 Damyan Ivanov
+# Copyright © 2010 gregor herrmann
 
 License:
 # This program is free software; you can redistribute it and/or modify it under
diff --git a/lib/App/KGB.pm b/lib/App/KGB.pm
index 2d3294d..be9c5b8 100644
--- a/lib/App/KGB.pm
+++ b/lib/App/KGB.pm
@@ -29,7 +29,7 @@ App::KGB - collabourative IRC helper
 
 =cut
 
-our $VERSION = '1.04';
+our $VERSION = '1.05';
 
 =head1 DESCRIPTION
 
diff --git a/script/kgb-bot b/script/kgb-bot
index 4fede8a..92b3aa2 100755
--- a/script/kgb-bot
+++ b/script/kgb-bot
@@ -6,6 +6,7 @@ use utf8;
 # KGB - an IRC bot helping collaboration
 # Copyright © 2008 Martín Ferrari
 # Copyright © 2008,2009,2010 Damyan Ivanov
+# Copyright © 2010 gregor herrmann
 #
 # 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
@@ -53,7 +54,7 @@ use warnings;
 use encoding 'utf8';
 use open ':encoding(utf8)';
 
-our $VERSION = '1.04';
+our $VERSION = '1.05';
 
 use Cwd;
 
@@ -79,6 +80,30 @@ sub save_progname () {
     $progname = Cwd::realpath($0);
 }
 
+sub polygen_available () {
+    unless ( eval { require IPC::Run } ) {
+        KGB->debug("error loading IPC::Run\n");
+        KGB->debug($@);
+        return undef;
+    }
+
+    unless ( eval { require File::Which } ) {
+        KGB->debug("error loading File::Which\n");
+        KGB->debug($@);
+        return undef;
+    }
+
+    my $oldpath = $ENV{PATH};
+    $ENV{PATH}='/usr/bin/:/usr/games';
+    my $polygen;
+    unless ( $polygen = File::Which::which('polygen') ) {
+        KGB->debug("missing polygen binary\n");
+    }
+    $ENV{PATH} = $oldpath;
+
+    return $polygen;
+}
+
 sub read_conf ($) {
     my $file = shift;
 
@@ -112,23 +137,6 @@ sub read_conf ($) {
         unless ( defined $conf->{min_protocol_ver} );
     $conf->{smart_answers} ||= ["My master told me to not respond."];
 
-    if ( $conf->{smart_answers_polygen} ) {
-        unless ( eval { require IPC::Run } ) {
-            KGB->out(
-                "Disabling smart_answers_polygen due to an error loading IPC::Run\n"
-            );
-            KGB->out($@);
-            $conf->{smart_answers_polygen} = 0;
-        }
-
-        unless ( -x '/usr/bin/polygen' ) {
-            KGB->out(
-                "Disabling smart_answers_polygen due to missing /usr/bin/polygen\n"
-            );
-            $conf->{smart_answers_polygen} = 0;
-        }
-    }
-
     $conf->{admins} //= [];
     ref( $conf->{admins} ) and ref( $conf->{admins} ) eq 'ARRAY'
         or die "Invalid config key: 'admins'. Must be an array";
@@ -164,23 +172,6 @@ sub read_conf ($) {
                 unless ( $conf->{repositories}{$repo} );
             push @{ $conf->{repositories}{$repo}{channels} }, $_->{name};
         }
-
-        if ( $_->{smart_answers_polygen} ) {
-            unless ( eval { require IPC::Run; 1 } ) {
-                KGB->out(
-                    "smart_answers_polygen disabled becouse of an error while loading IPC::Run\n"
-                );
-                KGB->out($@);
-                $_->{smart_answers_polygen} = 0;
-            }
-
-            unless ( -x '/usr/bin/polygen' ) {
-                KGB->out(
-                    "Disabling smart_answers_polygen due to missing /usr/bin/polygen\n"
-                );
-                $conf->{smart_answers_polygen} = 0;
-            }
-        }
     }
     my %chanidx
         = map ( { $conf->{channels}[$_]{name} => $conf->{channels}[$_] }
@@ -901,28 +892,50 @@ sub irc_001 {
 
 sub get_polygen_joke {
     my ( $out, $err );
+
+    my $polygen = polygen_available();
+    return undef unless $polygen;
+
     my $grammar = 'manager';
     my @polygen
-        = ( '/usr/bin/polygen', "/usr/share/polygen/eng/$grammar.grm" );
+        = ( $polygen, "/usr/share/polygen/eng/$grammar.grm" );
 
-    if ( IPC::Run::run( \...@polygen, \undef, \$out, \$err ) ) {
+    my $result = eval { IPC::Run::run( \...@polygen, \undef, \$out, \$err ) };
+    if ($@) {
+        KGB->debug( "Error while running " . join( ' ', @polygen ) . ": $@" );
+        return undef;
+    }
+    elsif ($result) {
         return $out;
     }
     else {
-        KGB->out( "Error while running " . join( ' ', @polygen ) . ": $err" );
-        return "poly error";
+        KGB->debug( "Error while running " . join( ' ', @polygen ) . ": $err" );
+        return undef;
     }
 }
 
 sub get_smart_answer {
     my $chan = shift;
-    return get_polygen_joke
-        if $KGB::config->{chanidx}{$chan}{smart_answers_polygen};
+
+    # Channel config
+    if ( $KGB::config->{chanidx}{$chan}{smart_answers_polygen} ) {
+        my $polygen_joke = get_polygen_joke;
+
+        return $polygen_joke if $polygen_joke;
+    }
+
     my $smart_answers = $KGB::config->{chanidx}{$chan}{smart_answers}
         if $chan;
     return $smart_answers->[ ( int( rand( scalar(@$smart_answers) ) ) ) ]
         if $smart_answers;
-    return get_polygen_joke if $KGB::config->{smart_answers_polygen};
+
+    # Global config
+    if ( $KGB::Config->{smart_answers_polygen} ) {
+        my $polygen_joke = get_polygen_joke;
+
+        return $polygen_joke if $polygen_joke;
+    }
+
     $smart_answers = $KGB::config->{smart_answers};
     return $smart_answers->[ ( int( rand( scalar(@$smart_answers) ) ) ) ]
         if $smart_answers;

Reply via email to